#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "iostream"
#include "villes.h"
#include "joueur.h"
#include "QInputDialog"
#include "QMessageBox"
#include "QFormLayout"
#include "QDialogButtonBox"
#include "QSpinBox"
#include "QComboBox"
#include "fenetreattaque.h"
#include "fenetrerecrutement.h"
#include "construireville.h"
#include "construirejoueur.h"
#include "marche.h"

#define SCORE_MAX 4

using namespace std;




MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{


    ui->setupUi(this);


    ConstruireVille *carte= new ConstruireVille(ui);
    J1=new Joueur1(ui);
    J2=new Joueur2(ui);
    JNEUTRE=new JoueurNeutre();
    ConstruireJoueur *joueurs= new ConstruireJoueur(J1,J2,JNEUTRE,ui);



    BoutonsJ2(false);    



/*------------------------------------------------------------------------------------------*/
/*--------------------------------------connections J1--------------------------------------*/
/*------------------------------------------------------------------------------------------*/
    QObject::connect(ui->BoutonOrJ1, SIGNAL(clicked()), this, SLOT(RecolterOr()));
    QObject::connect(ui->BoutonFerJ1, SIGNAL(clicked()), this, SLOT(RecolterFer()));
    QObject::connect(ui->BoutonConJ1, SIGNAL(clicked()), this, SLOT(AcheterConnaissances()));
    QObject::connect(ui->BoutonGardesJ1, SIGNAL(clicked()), this, SLOT(RecruterGardes()));
    QObject::connect(ui->BoutonWarJ1, SIGNAL(clicked()), this, SLOT(Attaquer()));
/*------------------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------------------*/
/*--------------------------------------connections J2--------------------------------------*/
/*------------------------------------------------------------------------------------------*/
    QObject::connect(ui->BoutonOrJ2, SIGNAL(clicked()), this, SLOT(RecolterOr()));
    QObject::connect(ui->BoutonFerJ2, SIGNAL(clicked()), this, SLOT(RecolterFer()));
    QObject::connect(ui->BoutonConJ2, SIGNAL(clicked()), this, SLOT(AcheterConnaissances()));
    QObject::connect(ui->BoutonGardesJ2, SIGNAL(clicked()), this, SLOT(RecruterGardes()));
    QObject::connect(ui->BoutonWarJ2, SIGNAL(clicked()), this, SLOT(Attaquer()));
/*------------------------------------------------------------------------------------------*/
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::BoutonsJ1(bool b)
{
    ui->BoutonOrJ1->setEnabled(b);
    ui->BoutonFerJ1->setEnabled(b);
    ui->BoutonConJ1->setEnabled(b);
    ui->BoutonGardesJ1->setEnabled(b);
    ui->BoutonWarJ1->setEnabled(b);
}

void MainWindow::BoutonsJ2(bool b)
{
    ui->BoutonOrJ2->setEnabled(b);
    ui->BoutonFerJ2->setEnabled(b);
    ui->BoutonConJ2->setEnabled(b);
    ui->BoutonGardesJ2->setEnabled(b);
    ui->BoutonWarJ2->setEnabled(b);
}

void MainWindow::FinTour(Joueur *J)
{
    if(J->getId()==J1->getId())//on passe au joueur 2
    {        
        BoutonsJ1(false);        
        BoutonsJ2(true);
        if(J2->actionPrecedente==0)
        {
            ui->BoutonOrJ2->setEnabled(false);
        }
        else if(J2->actionPrecedente==1)
        {
            ui->BoutonFerJ2->setEnabled(false);
        }
        else if(J2->actionPrecedente==3)
        {
            ui->BoutonConJ2->setEnabled(false);
        }
        else if(J2->actionPrecedente==4)
        {
            ui->BoutonGardesJ2->setEnabled(false);
        }
        else if(J2->actionPrecedente==5)
        {
            ui->BoutonWarJ2->setEnabled(false);
        }
        Score();

    }
    else
    {
        BoutonsJ2(false);
        BoutonsJ1(true);
        if(J1->actionPrecedente==0)
        {
            ui->BoutonOrJ1->setEnabled(false);
        }
        else if(J1->actionPrecedente==1)
        {
            ui->BoutonFerJ1->setEnabled(false);
        }
        else if(J1->actionPrecedente==3)
        {
            ui->BoutonConJ1->setEnabled(false);
        }
        else if(J1->actionPrecedente==4)
        {
            ui->BoutonGardesJ1->setEnabled(false);
        }
        else if(J1->actionPrecedente==5)
        {
            ui->BoutonWarJ1->setEnabled(false);
        }
        Score();
    }
}

/*------------------------------------------------------------------------------------------*/
/*------------------------------------------slots-------------------------------------------*/
/*------------------------------------------------------------------------------------------*/
void MainWindow::RecolterOr()
{
    if(sender()==ui->BoutonOrJ1)
    {
        J1->setGold(0);
        J1->actionPrecedente=0;
        FinTour(J1);
    }
    else
    {
        J2->setGold(0);
        J2->actionPrecedente=0;
        FinTour(J2);
    }

}

void MainWindow::RecolterFer()
{
    if(sender()==ui->BoutonFerJ1)
    {
        J1->setFer();
        J1->actionPrecedente=1;
        FinTour(J1);
    }
    else
    {
        J2->setFer();
        J2->actionPrecedente=1;
        FinTour(J2);
    }
}


void MainWindow::AcheterConnaissances()
{
    bool ok;
    if(sender()==ui->BoutonConJ1)
    {
        if(J1->getGold()<6)
        {
             QMessageBox::critical(this, "Connaissances", "Vous n'avez pas assez d'Or (6PO)");
        }
        else
        {
            QStringList items;
            items << tr("Marché");

            QString item = QInputDialog::getItem(this, "Connaissances", "Quelle connaissance souhaitez-vous acquérir (6PO) ?",items,0,false, &ok);
            if(ok)
            {
                if(item.toStdString()=="Marché")
                {
                    J1 = new Marche(J1);
                    ui->MarcheJ1->setCheckable(true);
                    ui->MarcheJ1->setChecked(true);
                }

                J1->setGold(-6);
                J1->setScore();
                J1->actionPrecedente=3;
                ui->BoutonConJ1->setEnabled(false);
                FinTour(J1);
            }
        }
    }
    else
    {
        if(J2->getGold()<6)
        {
             QMessageBox::critical(this, "Connaissances", "Vous n'avez pas assez d'Or (6PO)");
        }
        else
        {
            QStringList items;
            items << tr("Marché");

            QString item = QInputDialog::getItem(this, "Connaissances", "Quelle connaissance souhaitez-vous acquérir (6PO) ?",items,0,false, &ok);
            if(ok)
            {
                if(item.toStdString()=="Marché")
                {
                    J2= new Marche(J2);
                    ui->MarcheJ2->setCheckable(true);
                    ui->MarcheJ2->setChecked(true);
                }

                J2->setGold(-6);
                J2->setScore();
                J2->actionPrecedente=3;
                ui->BoutonConJ2->setEnabled(false);
                FinTour(J2);
            }
        }
    }
}

void MainWindow::RecruterGardes()
{
    bool ok;
    if(sender()==ui->BoutonGardesJ1)
    {
        if(J1->getFer()>0)
        {
            FenetreRecrutement a(J1);
            ok=a.run();
            if(ok)
            {
                J1->actionPrecedente=4;
                FinTour(J1);
            }
        }
        else
        {
            QMessageBox::critical(this, "Recruter", "Vous n'avez pas assez de Fer");
        }
    }
    else
    {
        if(J2->getFer()>0)
        {
            FenetreRecrutement b(J2);
            ok=b.run();
            if(ok)
            {
                J2->actionPrecedente=4;
                FinTour(J2);
            }
        }
        else
        {
            QMessageBox::critical(this, "Recruter", "Vous n'avez pas assez de Fer");
        }
    }
}

void MainWindow::Attaquer()
{
    bool ok;
    if(sender()==ui->BoutonWarJ1)
    {
        if(J1->getGardes()>0)
        {
            FenetreAttaque a(J1, JNEUTRE, J2);
            ok=a.run();
            if(ok){
                J2->setGardes(0);
                J1->setGardes(0);
                J1->actionPrecedente=5;
                FinTour(J1);
            }
        }
        else
        {
            QMessageBox::critical(this, "Manoeuvrer", "Vous n'avez pas de garde");
        }
    }
    else
    {
        if(J2->getGardes()>0)
        {
            FenetreAttaque b(J2, JNEUTRE, J1);
            ok=b.run();
            if(ok){
                J2->setGardes(0);
                J1->setGardes(0);
                J2->actionPrecedente=5;                
                FinTour(J2);                
            }
        }
        else
        {
            QMessageBox::critical(this, "Manoeuvrer", "Vous n'avez pas de garde");
        }
    }
}

void MainWindow::Score()
{
    if(J1->getScore()==SCORE_MAX)
    {
        BoutonsJ2(false);        
        BoutonsJ1(false);        
        QMessageBox::information(this, "Victoire", "Les Templiers ont gagnés !!");
        close();
    }
    if(J2->getScore()==SCORE_MAX)
    {
        BoutonsJ2(false);        
        BoutonsJ1(false);
        QMessageBox::information(this, "Victoire", "Les Spartiates ont gagnés !!");
        close();
    }
}
/*------------------------------------------------------------------------------------------*/

